winsafe\gui\native_controls/
header_items.rs1use crate::co;
2use crate::decl::*;
3use crate::gui::{iterators::*, *};
4use crate::msg::*;
5use crate::prelude::*;
6
7pub struct HeaderItems<'a> {
12 owner: &'a Header,
13}
14
15impl<'a> HeaderItems<'a> {
16 #[must_use]
17 pub(in crate::gui) const fn new(owner: &'a Header) -> Self {
18 Self { owner }
19 }
20
21 pub fn add(&self, text: &str, width: i32) -> SysResult<HeaderItem<'a>> {
25 let mut hdi = HDITEM::default();
26 hdi.mask = co::HDI::TEXT | co::HDI::WIDTH;
27 hdi.cxy = width;
28
29 let mut wtext = WString::from_str(text);
30 hdi.set_pszText(Some(&mut wtext));
31
32 let idx = unsafe {
33 self.owner
34 .hwnd()
35 .SendMessage(hdm::InsertItem { index_after: 0xffff, item: &hdi })?
36 };
37 Ok(self.get(idx))
38 }
39
40 #[must_use]
43 pub fn count(&self) -> SysResult<u32> {
44 unsafe { self.owner.hwnd().SendMessage(hdm::GetItemCount {}) }
45 }
46
47 #[must_use]
53 pub const fn get(&self, index: u32) -> HeaderItem<'a> {
54 HeaderItem::new(self.owner, index)
55 }
56
57 #[must_use]
59 pub fn iter(&self) -> SysResult<impl DoubleEndedIterator<Item = HeaderItem<'a>> + 'a> {
60 HeaderItemIter::new(self.owner)
61 }
62
63 pub fn last(&self) -> SysResult<Option<HeaderItem<'a>>> {
65 let count = self.count()?;
66 Ok(if count > 0 { Some(self.get(count - 1)) } else { None })
67 }
68}